package cn.wolf.lbs;

import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.os.Bundle;
import cn.wolf.tools.Log;
import cn.wolf.tools.SharedPreferencesUtil;
import cn.wolf.tools.StringUtil;

/**
 * <h3>位置信息工具类  </h3>
 * <p>1. GPS定位</p>
 * <p>2. Network定位</p>
 */
public class LocationUtils {

	/**
	 * 定位的Action值
	 */
	public static final String LOCATION_ACTION = "cn.ffcs.location.LocationManager";

	/**
	 * GPS定位
	 * @param ctx
	 * 		上下文
	 */
	public static void locationByGPS(Context ctx) {
		GPSLocation.startLocation(ctx);
	}

	/**
	 * GPS定位，增加外部回调接口
	 * @param ctx
	 * 		上下文
	 * @param iCall
	 * 		回调接口
	 */
	public static void locationByGPS(Context ctx, ILbsCallBack iCall) {
		GPSLocation.startLocation(ctx, iCall);
	}

	/**
	 * 通过网络定位
	 * @param context
	 * 		上下文
	 * @return
	 * 		位置信息
	 */
	public static Location getLocationByNetwork(Context context) {
		return NetworkLocation.getLocation(context);
	}

	/**
	 * 通过网络，并回调获取信息
	 * @param context
	 * 		上下文
	 * @param iCall
	 * 		回调接口
	 */
	public static void getLocationByNetwork(Context context, ILbsCallBack iCall) {
		Location location = NetworkLocation.getLocation(context);
		iCall.call(location);
	}

	/**
	 * 广播定位信息
	 * @param location 
	 * 		定位信息
	 * @param context
	 * 		上下文
	 * @param action 
	 * 		广播Action
	 */
	public static void sendBroadcast(Location location, Context context, String action) {
		if (location == null) {
			// 当定位异常时，清除缓存数据
			SharedPreferencesUtil.setValue(context, "k_location_lat", "");
			SharedPreferencesUtil.setValue(context, "k_location_lng", "");

			return;
		}

		if (StringUtil.isEmpty(action)) {
			Log.e("Location broadcast action is null");
			return;
		}

		Intent intent = new Intent();
		intent.setAction(action);
		Bundle b = new Bundle();
		b.putDouble("k_location_lat", location.getLatitude());
		b.putDouble("k_location_lng", location.getLongitude());
		Bundle bundle = location.getExtras();
		b.putSerializable("k_location_addr", bundle.getSerializable(NetworkLocation.K_ADDR));
		intent.putExtras(b);
		context.sendBroadcast(intent);
	}

}
